package Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import javax.swing.JOptionPane;

import modelo.Competencia;
import modelo.Equipo;
import modelo.Juez;
import modelo.Nadador;
import modelo.Panamericano;

import vista.VistaCompetencia;

public class Controladorvistacompetencia implements ActionListener {
	
	String modalidad[] = {"Libre","Pecho","Espalda","Mariposa"};
	String metros[] = {"50 Metros", "100 metros"};
	String sexo [] = {"Masculino","Femenino"};
	Equipo eqp = new Equipo();
	Juez jz;
	private VistaCompetencia ventana;
	private ArrayList<Competencia> competencias;
	Competencia competencia;
	Nadador nddr;
	Nadador EliminatoriaAfemenino[];
	Nadador EliminatoriaBfemenino[];
	Nadador EliminatoriaCfemenino[];
	Nadador EliminatoriaDfemenino[];
	Nadador SemifinalAfemenino[];
	Nadador SemifinalBfemenino[];
	Nadador SemifinalAfemino100[];
	Nadador SemifinalBfemenino100[];
	Nadador Finalfemenino[];
	Nadador Finalfemenino100[];
	
	Nadador EliminatoriasAmasculino[];
	Nadador EliminatoriaBmasculino[];
	Nadador EliminatoriaCmasculino[];
	Nadador EliminatoriaDmasculino[];
	Nadador SemifinalAmasculino[];
	Nadador SemifinalBmasculino[];
	Nadador SemifinalAmasculino100[];
	Nadador SemifinalBmasculino100[];
	Nadador Finalmasculino[];
	Nadador Finalmasculino100[];
	
	
	Nadador Nadadores[];
	int Carriles[];
	private Panamericano panamericano;
	comparador100metros  c100mt;
	comparador50metros c50mt;
	
	public Controladorvistacompetencia (Panamericano panamericano)
	
	{
		ventana = new VistaCompetencia();
		ventana.setLocationRelativeTo(null);
		ventana.setVisible(true);
		ventana.agregarListener(this);
		ventana.setmodalidad(modalidad);
		this.eqp = eqp;
		
		this.competencias= new ArrayList<Competencia>();
		EliminatoriaAfemenino = new Nadador[8];
		EliminatoriaBfemenino = new Nadador[8];
		EliminatoriaCfemenino = new Nadador[8];
		EliminatoriaDfemenino = new Nadador[8];
		SemifinalAfemenino = new Nadador[8];
		SemifinalBfemenino = new Nadador[8];
		SemifinalAfemino100 = new Nadador[8];
		SemifinalBfemenino100 = new Nadador[8];
		Finalfemenino = new Nadador[8];
		Finalfemenino100 = new Nadador[8];
		
	    EliminatoriasAmasculino = new Nadador[8];
		EliminatoriaBmasculino = new Nadador[8];
		EliminatoriaCmasculino = new Nadador[8];                          
		EliminatoriaDmasculino = new Nadador[8];
		SemifinalAmasculino100 = new Nadador[8];
		SemifinalBmasculino100 = new Nadador[8];
		SemifinalAmasculino = new Nadador[8];
		SemifinalBmasculino = new Nadador[8];
		
		Finalmasculino = new Nadador[8];
		Finalmasculino100 = new Nadador[8];
	
		Nadadores = new Nadador[64];
		Carriles = new int[8];
		this.nddr= nddr;
		this.panamericano=panamericano;
		c50mt = new comparador50metros();
		c100mt = new comparador100metros();
		
	
	}

	public void guardar ()
	{
		try
		{
		//===================Juez Principal ====================================================
			int juez = (int)Math.floor(Math.random()*panamericano.contarjueces());
			Juez Juezprincipal = panamericano.getjuez().get(juez);
			System.out.println(Juezprincipal.getNombre());
		//===================Creando Nadadores participantes ====================================
			for (int i=0;i<8;i++)
			{
				for(int j=0;j<8;j++)
				{
					Nadadores[8*i+j] = panamericano.getequipo().get(i).getNadadores().get(j);
				}
			}
			for (int i=0;i<Nadadores.length;i++)
			{
				System.out.println(Nadadores[i].getNombre());
			}
			
		//==========ELLIMINATORIASFemeninos==============================
			for (int i=0;i<panamericano.contarequipos();i++)
			{
				int indicenadadorfemenino = (int)Math.floor(Math.random()*4);
				EliminatoriaAfemenino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadorfemenino);
				EliminatoriaBfemenino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadorfemenino);
				EliminatoriaCfemenino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadorfemenino);
				EliminatoriaDfemenino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadorfemenino);
			}
	//=================ELIminatorias MASculino ============================
			for (int i=0;i<panamericano.contarequipos();i++)
			{
				int indicenadadormasculino = (int)Math.floor(Math.random()*4+4);
				EliminatoriasAmasculino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadormasculino);
				EliminatoriaBmasculino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadormasculino);
				EliminatoriaCmasculino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadormasculino);
				EliminatoriaDmasculino[i] = panamericano.getequipo().get(i).getNadadores().get(indicenadadormasculino);
			}
			
			
		//============================CARRILES USADOS POR NADADOR ============================
				for (int i=0;i<7;i++)
				{
					int indice = (int)Math.floor((Math.random()*8));
					Carriles[i] = indice;
				}
	//===========================Tiempo Cronometrado por nadador ===================
				
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaAfemenino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaBfemenino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaCfemenino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaDfemenino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
			//==========================TIEMPOS MASCULINO======================================
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriasAmasculino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaBmasculino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaCmasculino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				for (int i=0;i<8;i++)
				{
					int tiempo50 = (int)Math.floor(Math.random() * 11 + 25);
					int tiempo100 = (int)Math.floor((Math.random()* 11 + 55));
					
						EliminatoriaDmasculino[i].setTiempoCronometrado(tiempo50, tiempo100);
				
				}
				
		//========================Semi finalFEMENINO=====================
			
				Arrays.sort(EliminatoriaAfemenino,c50mt);
				Arrays.sort(EliminatoriaBfemenino,c50mt);
				Arrays.sort(EliminatoriaCfemenino,c50mt);
				Arrays.sort(EliminatoriaCfemenino,c50mt);
				for (int i=0;i<4;i++)
				{
					SemifinalAfemenino[i]=EliminatoriaAfemenino[i];
				};
				int i2;
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalAfemenino[i]=EliminatoriaBfemenino[i2];
					i2=i2+1;
				}
				for (int i=0;i<4;i++)
				{
					SemifinalBfemenino[i]=EliminatoriaCfemenino[i];
				}
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalBfemenino[i]=EliminatoriaDfemenino[i];
					i2=i2+1;
				}
		//============================Semi final femenino 100 metros ====================
				Arrays.sort(EliminatoriaAfemenino,c100mt);
				Arrays.sort(EliminatoriaBfemenino,c100mt);
				Arrays.sort(EliminatoriaCfemenino,c100mt);
				Arrays.sort(EliminatoriaCfemenino,c100mt);
				for (int i=0;i<4;i++)
				{
					SemifinalAfemino100[i]=EliminatoriaAfemenino[i];
				};
				
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalAfemino100[i]=EliminatoriaBfemenino[i2];
					i2=i2+1;
				}
				for (int i=0;i<4;i++)
				{
					SemifinalBfemenino100[i]=EliminatoriaCfemenino[i];
				}
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalBfemenino100[i]=EliminatoriaDfemenino[i];
					i2=i2+1;
				}
		//============================Semi final masculino ============================
				Arrays.sort(EliminatoriasAmasculino,c50mt);
				Arrays.sort(EliminatoriaBmasculino,c50mt);
				Arrays.sort(EliminatoriaCmasculino,c50mt);
				Arrays.sort(EliminatoriaDmasculino,c50mt);
				for (int i=0;i<4;i++)
				{
					SemifinalAmasculino[i]=EliminatoriasAmasculino[i];
				};
			
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalAmasculino[i]=EliminatoriaBmasculino[i2];
					i2=i2+1;
				}
				for (int i=0;i<4;i++)
				{
					SemifinalBmasculino[i]=EliminatoriaCmasculino[i];
				}
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalBmasculino[i]=EliminatoriaDmasculino[i];
					i2=i2+1;
				}
		//======================Semi final masculino 100 metros ===========================
				Arrays.sort(EliminatoriasAmasculino,c100mt);
				Arrays.sort(EliminatoriaBmasculino,c100mt);
				Arrays.sort(EliminatoriaCmasculino,c100mt);
				Arrays.sort(EliminatoriaDmasculino,c100mt);
				for (int i=0;i<4;i++)
				{
					SemifinalAmasculino100[i]=EliminatoriasAmasculino[i];
				};
			
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalAmasculino100[i]=EliminatoriaBmasculino[i2];
					i2=i2+1;
				}
				for (int i=0;i<4;i++)
				{
					SemifinalBmasculino100[i]=EliminatoriaCmasculino[i];
				}
				for (int i=4;i<8;i++)
				{
					i2 =0;
					SemifinalBmasculino100[i]=EliminatoriaDmasculino[i];
					i2=i2+1;
				}
		//==========================FINALFemenino========================
				Arrays.sort(SemifinalAfemenino,c50mt);
				Arrays.sort(SemifinalBfemenino,c50mt);
				for (int i=0;i<4;i++)
				{
					Finalfemenino[i]=SemifinalAfemenino[i];
				}
				
				for (int i=4;i<8;i++)
				{
					i2 =0;
					Finalfemenino[i]=SemifinalBfemenino[i];
					i2=i2+1;
				}
				
		for (int i=0;i<8;i++)
		{
			System.out.println(Finalfemenino[i].getNombre());
		}
		//========================== FINAL femenino 100 metros =====================
		Arrays.sort(SemifinalAfemino100,c100mt);
		Arrays.sort(SemifinalBfemenino100,c100mt);
		for (int i=0;i<4;i++)
		{
			Finalfemenino100[i]=SemifinalAfemino100[i];
		}
		
		for (int i=4;i<8;i++)
		{
			i2 =0;
			Finalfemenino100[i]=SemifinalBfemenino100[i];
			i2=i2+1;
		}
		
		for (int i=0;i<8;i++)
		{
			System.out.println(Finalfemenino100[i].getNombre());
		}
		//=====================Finalmasculino=====================
		        Arrays.sort(SemifinalAmasculino,c50mt);
		        Arrays.sort(SemifinalBmasculino,c50mt);
		        for (int i=0;i<4;i++)
		        {
		        	Finalmasculino[i]= SemifinalAmasculino[i];
		        }
		        for (int i=4;i<8;i++)
		        {
		        	i2=0;
		        	Finalmasculino[i]= SemifinalBmasculino[i];
		        	i2=i2+1;
		        }
		        for (int i=0;i<8;i++)
				{
					System.out.println(Finalmasculino[i].getNombre());
				}
		//====================Final Masculino 100 metros =======================00
		        Arrays.sort(SemifinalAmasculino100,c100mt);
		        Arrays.sort(SemifinalBmasculino100,c100mt);
		        for (int i=0;i<4;i++)
		        {
		        	Finalmasculino100[i]= SemifinalAmasculino100[i];
		        }
		        for (int i=4;i<8;i++)
		        {
		        	i2=0;
		        	Finalmasculino100[i]= SemifinalBmasculino100[i];
		        	i2=i2+1;
		        }
		        for (int i=0;i<8;i++)
				{
					System.out.println(Finalmasculino100[i].getNombre());
				}
		
		// =======================================================================================
		String codigo = ventana.getcodigo();
		String fecha = ventana.getfecha();
		String hora = ventana.gethora();
		String modalidad = ventana.getmodalidad();
		Competencia competencia = new Competencia(codigo,fecha,hora,modalidad);
		panamericano.agregarcompetencia(competencia);
		
		
		}catch (Exception e)
		{
			JOptionPane.showMessageDialog(null,e.toString());
			e.printStackTrace();
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String comando = e.getActionCommand();
		if (comando.equals("GenerarCompetencia"))
		{
			guardar();
		}
	}

}
class comparador50metros implements Comparator<Nadador>
{

	@Override
	public int compare(Nadador n1, Nadador n2) {
		int nro = new Integer(n1.getTiempoCronometrado()[0]).compareTo(n2.getTiempoCronometrado()[0]);
		return nro;
	}
	
}
class comparador100metros implements Comparator<Nadador>
{

	@Override
	public int compare(Nadador o1, Nadador o2) {
		int nro = new Integer(o1.getTiempoCronometrado()[1]).compareTo(o2.getTiempoCronometrado()[1]);
		return nro;
	}
	
}
